package cn.gxljc.technology.store_management.scontroller.repositoryadmincontroller;

import cn.gxljc.technology.store_management.entity.Warehouse;
import cn.gxljc.technology.store_management.service.superadminservice.modules.RepositoryManagement;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 功能：主要用于处理所有有关仓库业务的请求。
 * 作者：7214
 */
@RestController
@RequestMapping("/SuperAdmin")
public class RepositoryAdminController {

    @Resource
    private RepositoryManagement repositoryManagement;

    /**
     * 请求：创建仓库
     * 输入参数：repositoryID（仓库ID），repositoryName(仓库名称)，repositoryLocation（仓库位置）
     * 输出参数：result（0创建成功，-1执行出错，-2仓库重复）
     */
    //http://localhost:8081/SuperAdmin/createRepository?repositoryID=123&repositoryName=test&repositoryLocation=beijing
    @GetMapping("/createRepository")
    public String createRepository(HttpServletRequest request) {
        //获取参数
        String repositoryID = request.getParameter("repositoryID");
        String repositoryName = request.getParameter("repositoryName");
        String repositoryLocation = request.getParameter("repositoryLocation");

        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "createRepository");

        //非空判断
        if (repositoryID == null || repositoryName == null || repositoryLocation == null) {
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //执行业务操作
        //判断仓库ID格式是否正确
        Integer integer;
        try {
            integer = Integer.parseInt(repositoryID);
        } catch (NumberFormatException e) {
            System.out.println("仓库ID格式不正确");
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //创建仓库
        Integer test = repositoryManagement.createRepository(integer, repositoryName, repositoryLocation, "test");
        jsonObject.put("result", test);
        return jsonObject.toJSONString();
    }

    /**
     * 请求：删除仓库
     * 输入参数：repositoryID（仓库ID）
     * 输出参数：result（表示执行结果，0代表删除成功，-1执行出错）
     */
    //http://localhost:8081/SuperAdmin/deleteRepository?repositoryID=123
    @GetMapping("/deleteRepository")
    public String deleteRepository(HttpServletRequest request) {
        //获取参数
        String repositoryID = request.getParameter("repositoryID");

        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "deleteRepository");

        //非空判断
        if (repositoryID == null) {
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //执行业务操作
        //判断仓库ID格式是否正确
        Integer integer;
        try {
            integer = Integer.parseInt(repositoryID);
        } catch (NumberFormatException e) {
            System.out.println("仓库ID格式不正确");
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }


        //删除仓库
        Integer test = repositoryManagement.deleteRepository(integer);
        jsonObject.put("result", test);
        return jsonObject.toJSONString();
    }

    /**
     * 请求：查找所有仓库
     * 响应参数：repositories（所有仓库的列表）,result（表示执行结果，0代表查找成功，-1执行出错，-2所有仓库不存在）
     */
    //http://localhost:8081/SuperAdmin/findAllRepository
    @GetMapping("/findAllRepository")
    public String findAllRepository(HttpServletRequest request) {
        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "findAllRepository");

        //判断是否所有的仓库不存在
        List<Warehouse> warehouses = repositoryManagement.findAllRepository();
        if (warehouses == null) {
            jsonObject.put("result", -2);
            return jsonObject.toJSONString();
        }

        //存储多个json数据
        JSONArray jsonArray = new JSONArray();
        jsonArray.addAll(warehouses);
        jsonObject.put("repositories", jsonArray);
        jsonObject.put("result", 0);

        return jsonObject.toJSONString();
    }

    /**
     * 请求：修改仓库基本信息
     * 输入参数：repositoryID（仓库ID），repositoryName(仓库名称)，repositoryLocation(仓库位置)
     * 输出参数：result（结果——表示执行结果，0修改成功，-1修改失败，-2无此仓库）
     */
    //http://localhost:8081/SuperAdmin/changeRepositoryInfo?repositoryID=123&repositoryName=test&repositoryLocation=123
    @GetMapping("/changeRepositoryInfo")
    public String changeRepositoryInfo(HttpServletRequest request) {
        //获取参数
        String repositoryID = request.getParameter("repositoryID");
        String repositoryName = request.getParameter("repositoryName");
        String repositoryLocation = request.getParameter("repositoryLocation");

        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "changeRepositoryInfo");

        //非空判断
        if (repositoryID == null || repositoryName == null || repositoryLocation == null) {
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //执行业务操作
        //判断仓库编号格式是否正确
        Integer integer = null;
        try {
            integer = Integer.parseInt(repositoryID);
        } catch (NumberFormatException e) {
            System.out.println("仓库编号格式不正确");
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //创建仓库
        Integer test = repositoryManagement.changeRepositoryInfo(integer, repositoryName, repositoryLocation);
        jsonObject.put("result", test);
        return jsonObject.toJSONString();
    }

    /**
     * 请求：查找仓库基本信息
     * 输入参数：repositoryID（仓库ID）
     * 输出参数：result（表示执行结果，0代表成功，-1代表错误,-2代表没有此仓库信息）
     * repository（仓库对象），repositoryID（仓库ID），repositoryName（仓库名称），repositoryAddress（仓库地理位置）
     */
    //http://localhost:8081/SuperAdmin/findRepository?repositoryID=456
    @GetMapping("/findRepository")
    public String findRepository(HttpServletRequest request) {
        //获取参数
        String repositoryID = request.getParameter("repositoryID");

        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "findRepository");

        //非空判断
        if (repositoryID == null || repositoryID == "") {
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //业务逻辑
        //判断仓库编号格式是否正确
        Integer integer = null;
        try {
            integer = Integer.parseInt(repositoryID);
        } catch (NumberFormatException e) {
            System.out.println("仓库ID格式不正确");
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //判断查询结果是否为空
        Warehouse repository = repositoryManagement.findRepository(integer);
        if (repository == null) {
            System.out.println("没有查询到相应的仓库");
            jsonObject.put("result", -2);
            return jsonObject.toJSONString();
        }

        //将查询结果放入到json数据
        JSONObject repositoryJsonObject = new JSONObject();
        repositoryJsonObject.put("repositoryID", repository.getWarehouseID());
        repositoryJsonObject.put("repositoryName", repository.getWarehouseName());
        repositoryJsonObject.put("repositoryAddress", repository.getWarehouseAddress());

        jsonObject.put("result", 0);
        jsonObject.put("repository", repositoryJsonObject);

        return jsonObject.toJSONString();
    }

    /**
     * 请求：查看仓库是否存在
     * 输入参数：repositoryID（仓库ID）
     * 输出参数：result（表示执行结果，1代表存在，0代表不存在，-1代表出错）
     */
    //http://localhost:8081/SuperAdmin/isRepositoryExist?repositoryID=123
    @GetMapping("/isRepositoryExist")
    public String isRepositoryExist(HttpServletRequest request) {
        //获取参数
        String repositoryID = request.getParameter("repositoryID");

        //生成json对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("method", "findRepository");

        //非空判断
        if (repositoryID == null || repositoryID == "") {
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //业务逻辑
        //判断仓库编号格式是否正确
        Integer integer = null;
        try {
            integer = Integer.parseInt(repositoryID);
        } catch (NumberFormatException e) {
            System.out.println("仓库编号格式不正确");
            jsonObject.put("result", -1);
            return jsonObject.toJSONString();
        }

        //查询仓库是否存在
        Integer repositoryExist = repositoryManagement.isRepositoryExist(integer);
        jsonObject.put("result", repositoryExist);

        return jsonObject.toJSONString();
    }
}
